package third

/*
	给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。

	返回删除后的链表的头节点。

	注意：此题对比原题有改动

	示例 1:

	输入: head = [4,5,1,9], val = 5
	输出: [4,1,9]
	解释: 给定你链表中值为5的第二个节点，那么在调用了你的函数之后，该链表应变为 4 -> 1 -> 9.
	示例 2:

	输入: head = [4,5,1,9], val = 1
	输出: [4,5,9]
	解释: 给定你链表中值为1的第三个节点，那么在调用了你的函数之后，该链表应变为 4 -> 5 -> 9.
	https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/
*/

func deleteNode(head *ListNode, val int) *ListNode {
	return violentDelete(head, val)
}

func violentDelete(head *ListNode, val int) *ListNode {
	dummyHead := new(ListNode)
	dummyHead.Next = head
	pre := dummyHead
	cur := head
	for cur != nil {
		if cur.Val == val {
			pre.Next = cur.Next
		} else {
			pre = cur
		}
		cur = cur.Next
	}
	return dummyHead.Next
}
